package base.audio;

public class Jitter {
	public boolean primeiroPacote;
	
	public long tempoUltimoPacoteGerado;
	public long tempoUltimoPacoteRecebido;
	public long tempoReproducao;
	public long ultimoPacote;
	
	public long tempoPktGerado;
	public long tempoPktRecebido;
	
	public long atrasoDeRede;
	
	public long d, v, q, t;
	public double u;

	public Jitter() {
		primeiroPacote = true;
		tempoUltimoPacoteRecebido = 0;
		tempoUltimoPacoteGerado =0;
		ultimoPacote=0;
		tempoReproducao = System.currentTimeMillis();
		d = v = q = t = 0;
		u = 0.01;
		
	}
	
	public synchronized long getTimeoutInterval(long timeStampEmissor){
		if(primeiroPacote == true){
			tempoUltimoPacoteGerado = timeStampEmissor;
			tempoUltimoPacoteRecebido = System.currentTimeMillis();
			tempoReproducao = System.currentTimeMillis() + 2;
			primeiroPacote = false;
		}
		else{
			tempoPktGerado = timeStampEmissor;
			tempoPktRecebido = System.currentTimeMillis();
			atrasoDeRede = (tempoPktRecebido - tempoUltimoPacoteRecebido) - (tempoPktGerado - tempoUltimoPacoteGerado);
			tempoUltimoPacoteGerado = tempoPktGerado;
			tempoUltimoPacoteRecebido = tempoPktRecebido;
			
			t = tempoPktRecebido - atrasoDeRede;
			//System.out.println(atrasoDeRede);
		/*	if(t - ultimoPacote > 20){
				v = (long)((1-u)*v + u*(Math.abs (atrasoDeRede-d)));
				d = (long)((1-u)*d + u*atrasoDeRede);
				tempoReproducao = t + d + 4*v;
				q = tempoReproducao - t;
				ultimoPacote = t;
			}
			else{
				tempoReproducao = t + q;
				ultimoPacote = t;
			}
			*/
			tempoReproducao = t + 100;
		}
		return tempoReproducao;
	}

}